function [Output,Size]=my_shiftdim(Input,Case,Size)
    % [Output, Size] = my_shiftdim(Input, Case, Size)
    % ------ 自定义函数 ------
    % 将三维lat-lon-time数组转化为二维的time-(lon,lat)数组
    % 或进行逆操作。注意到lon,lat是按照二维矩阵线性索引的顺序增加的，方便调用。
    %
    % 参数说明：
    %   Input:输入的三维矩阵|或二维矩阵。
    %   Case: 若为1，则三维变二维；若为2，则逆操作，二维变三维。
    %   Output:经过处理后输出的矩阵。
    %   Size: 三维矩阵的数据，逆操作的时候需要用到，三维转二维的时候不需要输入。
    %
    % 二维数组的坐标如下排布
    %          lon1,lat1 lon1,lat2 lon1,lat3
    % time1
    % time2
    % time3
    %
    % 函数变换的过程演示，见demo_for_my_shiftdim.m
    %
    % Log:
    %    ????   ver1.0 create
    %   2021/10/26 ver2.0 改进Size成可选参数.
    %   2021/11/13 ver3.0 改进成对时间序列进行处理后，长度发生变化，也能转换回
    %               lat-lon(-time)矩阵。
    switch nargin
        case 2
            if Case == 1
                Size = size(Input);
                Output = reshape(shiftdim(Input,2),Size(end),[]);
            else
                error('wrong arguments "Case" for 3D to 2D. Need Size if 2D to 3D.')
            end
        case 3
            if Case == 2
                Output = shiftdim( reshape(Input,[],Size(1),Size(2)),1);
            else
                error('Wrong arguments "Case"');
            end
    end
end